<?php
/**
 * DBテーブル抽象クラス
 *
 * @author tanaka
 * @package Db_Table
 * @subpackage Abstract
 */
abstract class Db_TableAbstract extends Base_Object
{
	/**
	 * @var Db_Adapter_PdoMysql
	 */
	protected $_db;

	/**
	 * コンストラクタ
	 *
	 * @return
	 */
	public function __construct()
	{
		$this->_db = Db_Manager::getInstance()->getAdapter();
	}

	/**
	 * Like用のエスケープ処理をし、両端で部分一致の文字列に変更します。
	 * @param string $value
	 * @return string
	 */
	protected function _quoteLike($value)
	{
		// SQLサーバー用
		if ($this->_db instanceof Zend_Db_Adapter_Sqlsrv || $this->_db instanceof Zend_Db_Adapter_Pdo_Mssql) {
			$value = strtr($value, array(
				'%'	 => '[%]',
				'_'	 => '[_]',
				'['	 => '[[]',
			));
		}
		// mysql用
		else if ($this->_db instanceof Zend_Db_Adapter_Mysqli || $this->_db instanceof Zend_Db_Adapter_Pdo_Mysql) {
			$value = strtr($value, array(
				'%'	 => '\%',
				'_'	 => '\_',
				'\\' => '\\\\',
			));
		}

		return '%' . $value . '%';
	}

	/**
	* Like用のエスケープ処理をし、前方一致の文字列に変更します。
	* @param string $value
	* @return string
	*/
	protected function _quoteForwardLike($value)
	{
		// SQLサーバー用
		if ($this->_db instanceof Zend_Db_Adapter_Sqlsrv || $this->_db instanceof Zend_Db_Adapter_Pdo_Mssql) {
			$value = strtr($value, array(
					'%'	 => '[%]',
					'_'	 => '[_]',
					'['	 => '[[]',
			));
		}
		// mysql用
		else if ($this->_db instanceof Zend_Db_Adapter_Mysqli || $this->_db instanceof Zend_Db_Adapter_Pdo_Mysql) {
			$value = strtr($value, array(
					'%'	 => '\%',
					'_'	 => '\_',
					'\\' => '\\\\',
			));
		}

		return $value . '%';
	}

	/**
	* Like用のエスケープ処理をし、後方一致の文字列に変更します。
	* @param string $value
	* @return string
	*/
	protected function _quoteBehindLike($value)
	{
		$value = strtr($value, array(
			'%'	 => '\%',
			'_'	 => '\_',
			'\\' => '\\\\',
		));
		

		return '%' . $value;
	}
}
